package _3_bridge
/**

TODO 自己根据理解实现的，不知道是否正确

 */

//实现化角色
type Color interface {
	getColor() string
}


//具体实现化角色：黄色
type Yellow struct {
	colorName string
}

func (self *Yellow) getColor() string{
	return self.colorName
}
func NewYellow(colorName string)*Yellow{
	return  &Yellow{
		colorName,
	}
}

//具体实现化角色：红色
type Red struct {
	colorName string
}

func (self *Red) getColor() string{
	return self.colorName
}

func NewRed(colorName string)*Red{
	return  &Red{
		colorName,
	}
}

//抽象化角色 包
type Bag struct {
	color Color
	bagName string
}

func (self *Bag)SetColor(color Color){
	self.color = color;
}

//扩展抽象角色 挎包
type HandBag struct {
	*Bag
}

func (self *HandBag)getName() string{
	return self.color.getColor() + self.bagName
}

func NewHandBag(color Color,bagName string)*HandBag{
	return &HandBag{
		&Bag{
			 color,
			bagName,
		},
	}
}

//扩展抽象化角色 钱包
type Wallet struct {
	*Bag
}
func (self *Wallet)getName() string{
	return self.color.getColor() + self.bagName
}

func NewWalletBag(color Color,bagName string) *Wallet{
	return &Wallet{
		&Bag{
			color:color,
			bagName:bagName,
		},
	}
}
